package br.uniminas.action;

import java.util.*;

import br.uniminas.entidades.*;
import br.uniminas.negocio.*;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class FuncionarioAction extends ActionSupport {

	private static final long serialVersionUID = 1L;

	private DepartmentoBO departamentoService = new DepartmentoBO();
	private FuncionarioBO funcionarioService = new FuncionarioBO();
	private Funcionario funcionario;
	private List<Funcionario> listaFuncionarios;
	private List<Departamento> listaDepartamentos;
	private int departamentoID, idade;
	private String nome;

	@SuppressWarnings("unchecked")
	public String buscaTodosFuncionarios() {
		listaFuncionarios = funcionarioService.buscaTodos();
		return "success";
	}

	public Funcionario getFuncionario() {
		return funcionario;
	}

	public void setFuncionario(Funcionario funcionario) {
		this.funcionario = funcionario;
	}

	public List<Funcionario> getListaFuncionarios() {
		return listaFuncionarios;
	}

	public void setListaFuncionarios(List<Funcionario> listaFuncionarios) {
		this.listaFuncionarios = listaFuncionarios;
	}

	public List<Departamento> getListaDepartamentos() {
		return listaDepartamentos;
	}

	public void setListaDepartamentos(List<Departamento> listaDepartamentos) {
		this.listaDepartamentos = listaDepartamentos;
	}

	public int getIdade() {
		return idade;
	}

	public void setIdade(int idade) {
		this.idade = idade;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String setUpForInsertOrUpdate() {
		prep();
		if (funcionario != null && funcionario.getId() != null) {
			funcionario = funcionarioService.getEmployee(funcionario.getId());
		}
		return "success";
	}

	public String insertOrUpdate() {
		if (!validationSuccessful()) {
			return "input";
		} else {
			if (funcionario.getId() == null) {
				funcionarioService.insertEmployee(funcionario);
			} else {
				funcionarioService.updateEmployee(funcionario);
			}

		}
		return "success";
	}

	public String deleteEmployee() {
		funcionarioService.deleteEmployee(funcionario.getId());
		return "success";
	}

	public String consultaFuncionariosPorDepartamento() {
		prep();
		return "sucesso";
	}

	public String buscaFuncionariosPorDepartamento() {
		listaFuncionarios = funcionarioService.buscaFuncionariosPorDepartamento(departamentoID);
		return "sucesso";
	}

	public String consultaFuncionariosPorNome() {
		listaFuncionarios = funcionarioService.buscaFuncionariosPorNome(nome);
		return "sucesso";
	}

	public String consultaFuncionariosPorIdade() {
		listaFuncionarios = funcionarioService.buscaFuncionariosPorIdade(idade);
		return "sucesso";
	}

	private void prep() {
		listaDepartamentos = departamentoService.getAllDepartments();
		Map<String, List<Departamento>> session = ActionContext.getContext().getSession();
		session.put("departamentos", listaDepartamentos);
	}

	private boolean validationSuccessful() {
		if (funcionario.getNome() == null || funcionario.getNome().trim().length() < 1) {
			addActionMessage("FirstName is required");
		}
		if (funcionario.getNome() == null || funcionario.getNome().trim().length() < 1) {
			addActionMessage("LastName is required");
		}
		if (funcionario.getIdade() != null) {
			if (funcionario.getIdade() > 90 || funcionario.getIdade() < 15) {
				addActionMessage("Make sure the age U input is correct");
			}
		}
		if (this.hasActionMessages()) {
			return false;
		} else {
			return true;
		}
	}

	public List<Funcionario> getEmployees() {
		return listaFuncionarios;
	}

	public void setEmployees(List<Funcionario> employees) {
		this.listaFuncionarios = employees;
	}

	public Funcionario getEmployee() {
		return funcionario;
	}

	public void setEmployee(Funcionario employee) {
		this.funcionario = employee;
	}

	public int getDepartamentoID() {
		return departamentoID;
	}

	public void setDepartamentoID(int departamentoID) {
		this.departamentoID = departamentoID;
	}

}
